home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 09 Application Software / GC1.SDA / MASS MERGER (.txt) < prev    next >
Commodore BASIC  |  2019-04-13  |  8KB  |  302 lines

  1. 5 REM MASS MERGE VERSION 9
  2. 10 DN=PEEK(186)
  3. 20 IFI=0THENI=1:LOAD"SORT & DIR ML",DN,1
  4. 30 REM\ MASS MERGER 3 PROGRAM
  5. 40 REM\ WRITTEN BY KURT BRANDON
  6. 50 DN=8:REM REL FILE DRIVE
  7. 60 MF=8:REM MERGE FILE DRIVE
  8. 70 REMIFI=1THEN150
  9. 80 DIMOP$(600),IN$(310),SD$(310)
  10. 90 Z$=CHR$(0):OP$(0)=Z$:NP$="                                      "
  11. 100 MD$=""
  12. 110 S%=0:E%=30:REM FIELD DELIMITERS FOR SORT PROGRAM
  13. 120 DEFFNDS(R)=(R-INT(R)):RT$=CHR$(13):NL=14
  14. 130 POKE53281,1:POKE53280,13:POKE646,0
  15. 140 PRINT"[147]MASS MERGER PROGRAM"
  16. 150 PRINT"  - PLEASE WAIT -"
  17. 160 REMLOAD"SORT & DIR ML",8,1
  18. 170 PRINT"[145]                  "
  19. 180 INPUT"[145]    MERGE FILE DRIVE";MF
  20. 190 INPUT"LOCATIONS FILE DRIVE";DN
  21. 200 OPEN15,DN,15:OPEN14,MF,15
  22. 210 PRINT"[147] "
  23. 220 GOSUB2970
  24. 230 PRINT" CHOOSE ONE"
  25. 240 PRINT" 1) READ A FILE"
  26. 250 PRINT" 2) MERGE A FILE"
  27. 260 PRINT" 3) SCRATCH IT"
  28. 270 PRINT" 4) APPEND TO IT"
  29. 280 PRINT" 5) QUIT"
  30. 290 CN=0:INPUT" CHOICE";CN:CN=ABS(INT(CN))
  31. 300 IFCN<1ORCN>5THENPRINT"[145][145][145]":GOTO290
  32. 310 ONCNGOTO320,840,540,550,2920
  33. 320 RC=0:PRINT"[147]HIT ANY KEY AND SELECT FILE"
  34. 330 PRINT"TO READ FROM MERGE DRIVE"
  35. 340 POKE198,0:WAIT198,1
  36. 350 POKE186,MF:SYS49500,G,S
  37. 360 CLOSE15:OPEN15,DN,15
  38. 370 IFG$=""THEN210
  39. 380 OPEN2,MF,2,G$
  40. 390 GET#2,A$,A$,A$,A$:CLOSE2:IFST=>64THENPRINT"FILE IS EMPTY.":GOTO500
  41. 400 OPEN2,MF,2,G$
  42. 410 INPUT#2,SA$,LA$,LO$:RC=RC+1
  43. 420 PRINT""SA$:PRINT"   "LA$:PRINT"   "LO$
  44. 430 IFPEEK(653)<>0THEN430
  45. 440 GETA$:IFA$="Q"THEN500
  46. 450 IFST=0THENFORZ=1TO150:NEXT: GOTO410
  47. 460 CLOSE2
  48. 470 PRINT"     [195][195][195][195][195][195][195][195][195][195][195][195][195]"
  49. 480 PRINT"     "RC"RECORDS"
  50. 490 PRINT"     [195][195][195][195][195][195][195][195][195][195][195][195][195]":PRINT
  51. 500 CLOSE2:WAIT203,64
  52. 510 POKE198,0:PRINT" - ANY KEY TO EXIT -"
  53. 520 WAIT198,1
  54. 530 GOTO210
  55. 540 PRINT#14,"S0:MERGE FILE":OPEN2,MF,2,"MERGE FILE,S,W":GOTO560
  56. 550 OPEN2,MF,2,"MERGE FILE,S,A"
  57. 560 GOSUB2370
  58. 570 PRINT"LOCATION[144]"
  59. 580 SA$="":INPUTSA$:IFLEN(SA$)>30THENPRINT"MORE THAN 30 CHARACTERS[146]":GOTO580
  60. 590 IFSA$=""THENCLOSE2:GOTO210
  61. 600 GOSUB2560
  62. 610 PRINT"LATITUDE[144]":GOSUB2080:LA=RV:LA$=STR$(LA):PRINT:PRINT
  63. 620 PRINT"LONGITUDE[144]":GOSUB2080:LO=RV:LO$=STR$(LO)
  64. 630 PRINT"[147]"SA$"[144]"
  65. 640 PRINT"LATITUDE:"LA;TAB(25);
  66. 650 S$="N":IFLA<0THENS$="S"
  67. 660 RV=LA:GOSUB2490
  68. 670 PRINTS$"  "RV$"[144]"
  69. 680 PRINT"LONGITUDE:"LO;TAB(25);
  70. 690 S$="W":IFLO<0THENS$="E"
  71. 700 RV=LO:GOSUB2490
  72. 710 PRINTS$"  "RV$"[144]"
  73. 720 PRINT" CORRECT?"
  74. 730 GETA$:IFA$=""THEN730
  75. 740 IFA$<>"N"ANDA$<>"Y"THEN730
  76. 750 IFA$="N"THEN560
  77. 760 PRINT#2,SA$
  78. 770 PRINT#2,LA$
  79. 780 PRINT#2,LO$
  80. 790 GOTO560
  81. 800 :
  82. 810 :
  83. 820 :
  84. 830 REM\  MERGE SEQ FILE ENTRIES
  85. 840 PRINT"[147]HIT ANY KEY AND SELECT"
  86. 850 PRINT"FILE TO MERGE FROM MERGE DRIVE"
  87. 860 POKE198,0:WAIT198,1
  88. 870 POKE186,MF:SYS49500,G,S
  89. 880 CLOSE15:OPEN15,DN,15
  90. 890 IFG$=""THEN210
  91. 900 PRINT"[147]    MERGE MODE"
  92. 910 PRINT" 1) MERGE ALL ENTRIES"
  93. 920 PRINT" 2) MERGE SELECTED ENTRIES"
  94. 930 PRINT" 3) QUIT TO MAIN MENU"
  95. 940 INPUT"   ";CH
  96. 950 IFCH<1ORCH>3THENPRINT"[145][145][145][145]":GOTO940
  97. 960 IFCH=3THENGOTO210
  98. 970 IFCH=2THENGOTO1000
  99. 980 IFCH=1THENGOTO1510
  100. 990 REM\ MANUAL SELECT
  101. 1000 PRINT"[147]   SELECTIVE MERGE - LOADING RECORDS"
  102. 1010 IN$(0)=Z$:FORI=1TO300:IN$(I)="":NEXT
  103. 1020 RC=0:OPEN8,MF,8,G$
  104. 1030 RC=RC+1:GOSUB2950
  105. 1040 INPUT#8,SA$,LA$,LO$
  106. 1050 GOSUB2560
  107. 1060 LL=11:IV$=LA$:GOSUB2650:LA$=IV$
  108. 1070 IV$=LO$:GOSUB2650:LO$=IV$
  109. 1080 IN$(RC)=SA$+RT$+LA$+RT$+LO$
  110. 1090 IFST=0THEN1030
  111. 1100 CLOSE8
  112. 1110 FORI=1TO300:SD$(I)=" ":NEXT
  113. 1120 PO=1:A=1:B=NL:GOSUB1320:KK=1:GOSUB1300
  114. 1130 :
  115. 1140 GETA$:IFA$=""THEN1140
  116. 1150 IFA$=""ANDIN$(A+NL-1)=""THENA=1:B=NL:GOSUB1320:KK=1:GOSUB1300:GOTO1140
  117. 1160 IFA$=""THENA=A+NL:B=B+NL:GOSUB1320:KK=1:GOSUB1300
  118. 1170 IFA$="[157]"THENIFA=1THEN1140
  119. 1180 IFA$="[157]"THENA=A-NL:B=B-NL:GOSUB1320:KK=1:GOSUB1300:GOTO1140
  120. 1190 IFA$=""THENIFKK=NLTHEN1140
  121. 1200 IFA$=""THENKK=KK+1:GOSUB1300:GOTO1140
  122. 1210 IFA$="[145]"THENIFKK=1THEN1140
  123. 1220 IFA$="[145]"THENKK=KK-1:GOSUB1300:GOTO1140
  124. 1230 IFA$=RT$THENSD$(A+KK-1)=CHR$(32-10*(ASC(SD$(A+KK-1))=32)):GOSUB1310
  125. 1240 IFA$="[133]"THENFORYY=ATOB:SD$(YY)="*":NEXT:GOSUB1320:GOSUB1300:GOTO1140
  126. 1250 IFA$="[137]"THENFORYY=ATOB:SD$(YY)=" ":NEXT:GOSUB1320:GOSUB1300:GOTO1140
  127. 1260 IFA$="Q"THENCLOSE2:GOTO210
  128. 1270 IFA$="M"THEN1460
  129. 1280 IFA$="S"THENSYS49152,U,IN$(0),S%,E%:GOTO1110
  130. 1290 GOTO1140
  131. 1300 PRINT""LEFT$(MD$,KS)" ":PRINTLEFT$(MD$,KK+1)">":KS=KK+1:RETURN
  132. 1310 PRINT"":FORZ=ATOB:PRINT""SD$(Z):NEXT:RETURN
  133. 1320 PRINT"[147]"
  134. 1330 FORZ=ATOB
  135. 1340 PRINT""SD$(Z);LEFT$(IN$(Z),30)
  136. 1350 NEXT
  137. 1360 PRINT"- - - - - - - - - - - - - - - - -"
  138. 1370 PRINT"CRSR LEFT/RIGHT [144]PAGE"
  139. 1380 PRINT"   CRSR UP/DOWN [144]MOVE POINTER"
  140. 1390 PRINT"         RETURN[144] TOGGLE SELECTION"
  141. 1400 PRINT"             F1[144] SELECT ALL ON SCREEN"
  142. 1410 PRINT"             F2[144] DESELECT ALL ON SCREEN"
  143. 1420 PRINT"              Q[144] QUIT TO MAIN MENU"
  144. 1430 PRINT"              M[144] MERGE SELECTED NAMES"
  145. 1440 PRINT"              S[144] SORT"
  146. 1450 RETURN
  147. 1460 PRINT"[147]":LK=0:FORI=1TO300
  148. 1470 IFSD$(I)=" "THENIN$(I)="":GOTO1500
  149. 1480 IFIN$(I)=""THEN1500
  150. 1490 LK=LK+1
  151. 1500 NEXT:GOTO1660
  152. 1510 PRINT"[147]":FORI=1TO300:IN$(I)="":NEXT:IN$(0)=Z$:OPEN2,MF,2,G$:LK=1
  153. 1520 :
  154. 1530 REM\ MERGE...LOAD RECORDS
  155. 1540 GOSUB2950
  156. 1550 INPUT#2,SA$,LA$,LO$
  157. 1560 GOSUB2560:REM FORMAT SA$
  158. 1570 PRINTSA$
  159. 1580 LA=VAL(LA$):LA$=STR$(LA)
  160. 1590 LO=VAL(LO$):LO$=STR$(LO)
  161. 1600 LL=11:IV$=LA$:GOSUB2650:LA$=IV$
  162. 1610 IV$=LO$:GOSUB2650:LO$=IV$
  163. 1620 IN$(LK)=SA$+RT$+LA$+RT$+LO$
  164. 1630 IFST=0THENLK=LK+1:GOTO1540
  165. 1640 CLOSE2:GOSUB2930
  166. 1650 REM\ CHECK MERGE LIST FOR DUPLICATIONS
  167. 1660 SYS49152,U,IN$(0),S%,E%
  168. 1670 FORI=1TOLK:PRINTLEFT$(IN$(I),30):NEXT
  169. 1680 PRINT"[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
  170. 1690 PRINT"CHECKING MERGE LIST FOR DUPLICATIONS":PRINT:PRINT
  171. 1700 XK=LK:FORI=1TOLK-1
  172. 1710 TV$=LEFT$(IN$(I),30)
  173. 1720 PRINTTV$
  174. 1730 IFTV$=LEFT$(IN$(I+1),30)THENIN$(I)="":XK=XK-1
  175. 1740 PRINT"[145][145]":NEXT:LK=XK:GOSUB2930
  176. 1750 SYS49152,U,IN$(0),S%,E%:GOSUB2930
  177. 1760 :
  178. 1770 REM\ MERGE...DELETE DUPLICATES
  179. 1780 :
  180. 1790 REM\ MERGE THE NEW ENTRIES
  181. 1800 DL=1:FORIY=65TO90
  182. 1810 AP=0:N1=0:FORJ=DLTOLK
  183. 1820 IFLEFT$(IN$(J),1)<>CHR$(IY)THEN1870
  184. 1830 DL=J+1:IFN1=1THEN1860
  185. 1840 PRINT"[147] - NEW ENTRIES -"
  186. 1850 N1=1:FORII=1TO300:OP$(II)="":NEXTII
  187. 1860 AP=AP+1:OP$(AP)=IN$(J):PRINT""LEFT$(IN$(J),30)"[144]":IN$(J)=""
  188. 1870 NEXTJ
  189. 1880 IFAP=0THEN1920
  190. 1890 PRINT" - MERGING -"
  191. 1900 SA$=LEFT$(OP$(1),1)
  192. 1910 GOSUB2700
  193. 1920 NEXTIY
  194. 1930 CLOSE2:CLOSE8:GOTO210
  195. 1940 :
  196. 1950 :
  197. 1960 :
  198. 1970 REM\     POSITION & ERROR SUB
  199. 1980 RH=INT(RN/256):RL=RN-(256*RH)
  200. 1990 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1)
  201. 2000 INPUT#15,E,E$,AA,B
  202. 2010 IF E=0ORE=50THENRETURN
  203. 2020 PRINTE;E$;AA;B
  204. 2030 FORI=1TO15:CLOSEI:NEXT:STOP
  205. 2040 :
  206. 2050 :
  207. 2060 :
  208. 2070 REM\      INPUT SUB
  209. 2080 S$="":CC=0:DP=0:MP=0:SP=0:HM=0:DM=0:SG=1
  210. 2090 DEFFNVC(X)=(X>=48ANDX<=57)OR(X=78ORX=83ORX=69ORX=87ORX=58ORX=20ORX=13ORCV=46)
  211. 2100 FORKI=0TO40
  212. 2110 IFKI=0THENPRINT" [146][157]";
  213. 2120 IFKI=20THENPRINT" [157]";
  214. 2130 GETA$:IFA$<>""THENGOTO2150
  215. 2140 NEXTKI:GOTO2100
  216. 2150 CV=ASC(A$):IFFNVC(CV)=0THENGOTO2100
  217. 2160 IFCV=13ORCV=20THENPRINT" [157]";
  218. 2170 IFCV<>13ANDCV<>20THENCC=CC+1:PRINTA$;:IFCV<>58THENS$=S$+A$
  219. 2180 IFCC=0THENGOTO2220
  220. 2190 IFCV<>20THENGOTO2220
  221. 2200 FORKI=1TOCC:PRINT"[157]";:NEXT:FORKI=1TOCC:PRINT"[160]";:NEXT:FORKI=1TOCC:PRINT"[157]";:NEXT
  222. 2210 GOTO2080
  223. 2220 IFCV=58ANDDM=0THENDP=VAL(S$):DM=1:S$="":GOTO2100
  224. 2230 IFCV=58ANDDM=1THENMP=VAL(S$):DM=2:S$="":GOTO2100
  225. 2240 IFDM=1ANDCV=13THENMP=VAL(S$):S$="":GOTO2290
  226. 2250 IFDM=2ANDCV=13THENSP=VAL(S$):S$="":GOTO2290
  227. 2260 IFCV=78ORCV=87THENSG=1:CV=58:GOTO2220
  228. 2270 IFCV=83ORCV=69THENSG=-1:CV=58:GOTO2220
  229. 2280 IFCV=78ORCV=87ORCV=83ORCV=69THENSP=VAL(S$)
  230. 2290 IFCV=13AND(DM=1ORDM=2)THENRV=(DP+MP/60+SP/3600)*SG:RETURN
  231. 2300 IFCV=13ANDDM=0THENRV=VAL(S$)*SG:RETURN
  232. 2310 GOTO2100
  233. 2320 IFD<>1THENGOTO2290
  234. 2330 :
  235. 2340 :
  236. 2350 :
  237. 2360 REM\ INPUT EXPLANATION SUB
  238. 2370 PRINT"[147]TO ENTER LOCATIONS":PRINT" DECIMAL: XXX.XX "
  239. 2380 PRINT" DEG/MIN/SEC: DD:MM:SS"
  240. 2390 PRINT" FOLLOW COORDINATE"
  241. 2400 PRINT" WITH E[144] FOR EAST LONGITUDE (DEFAULT:W[144])"
  242. 2410 PRINT"   OR S[144] FOR SOUTH LATITUDE (DEFAULT:N[144])"
  243. 2420 PRINT" AFTER ENTRY, RETURN[144]"
  244. 2430 PRINT"  TO EXIT, PRESS RETURN[144] WITH NO INPUT"
  245. 2440 PRINT" [195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][178][195][195][195][195][195][195]":RETURN
  246. 2450 :
  247. 2460 :
  248. 2470 :
  249. 2480 REM\  DEGREES-MINUTES-SECONDS SUB
  250. 2490 RV=ABS(RV)
  251. 2500 DP=INT(RV):MP=60*FNDS(RV):SP=60*FNDS(MP):MP=INT(MP+.5):DM=1
  252. 2510 RV$=STR$(DP)+"[188]"+STR$(MP)+"'":RETURN
  253. 2520 :
  254. 2530 :
  255. 2540 :
  256. 2550 REM\  FORMAT PLACE NAME SUB
  257. 2560 K2$="":FORII=1TOLEN(SA$):K2=ASC(MID$(SA$,II,1)):K2=K2AND127
  258. 2570 K2$=K2$+CHR$(K2):NEXT:SA$=K2$
  259. 2580 IFLEFT$(SA$,1)=" "THENSA$=RIGHT$(SA$,LEN(SA$)-1):GOTO2580
  260. 2590 IFLEN(SA$)<30THENSA$=SA$+LEFT$(NP$,30-LEN(SA$))
  261. 2600 RETURN
  262. 2610 :
  263. 2620 :
  264. 2630 :
  265. 2640 REM\ FORMAT PARAMETER SUB
  266. 2650 IFRIGHT$(IV$,1)=" "THENIV$=LEFT$(IV$,LEN(IV$)-1):GOTO2650
  267. 2660 IV$=IV$+LEFT$(NP$,LL-LEN(IV$)):RETURN
  268. 2670 :
  269. 2680 :
  270. 2690 REM\ MERGE SUB
  271. 2700 PRINT"LOADING"
  272. 2710 OPEN8,DN,8,LEFT$(SA$,1):RN=1
  273. 2720 GOSUB1980:GOSUB1990:INPUT#8,MN
  274. 2730 FORRN=2TOMN:GOSUB1980:GOSUB1990:GOSUB2950
  275. 2740 PRINT"              ":PRINT"[145]"MN-1;RN-1"[145]"
  276. 2750 INPUT#8,SA$,LA$,LO$
  277. 2760 OP$(RN+AP-1)=SA$+RT$+LA$+RT$+LO$
  278. 2770 NEXT
  279. 2780 PRINT"PROCESSING":SYS49152,U,OP$(0),S%,E%
  280. 2790 QK=MN+AP:XK=QK:GOSUB2930:FORI=1TOQK-1
  281. 2800 TV$=LEFT$(OP$(I),30)
  282. 2810 IFTV$=LEFT$(OP$(I+1),30)THENOP$(I)="":XK=XK-1
  283. 2820 NEXT:PRINTQK-XK" DELETIONS":QK=XK:GOSUB2930
  284. 2830 SYS49152,U,OP$(0),S%,E%
  285. 2840 RN=1:GOSUB1980:GOSUB1990:PRINT#8,QK
  286. 2850 PRINT"WRITING":FORII=1TOQK:RN=II+1:
  287. 2860 PRINT"             ":PRINT"[145]"QK-1;II-1"[145]"
  288. 2870 GOSUB1980:GOSUB1990:GOSUB2950
  289. 2880 PRINT#8,OP$(II);:OP$(II)="":NEXT:CLOSE8:RETURN
  290. 2890 :
  291. 2900 :
  292. 2910 :
  293. 2920 FORI=1TO15:CLOSEI:NEXT:POKE186,8:END
  294. 2930 REMPOKE198,0:WAIT198,1:RETURN
  295. 2940 RETURN
  296. 2950 IFPEEK(52)<PEEK(50)+3THENYX=FRE(0)
  297. 2960 RETURN
  298. 2970 RETURN:FORI=1TO600:OP$(I)="":NEXT
  299. 2980 FORI=1TO300:IN$(I)="":NEXT
  300. 2990 FORI=1TO300:SD$(I)="":NEXT
  301. 3000 RETURN
  302.